package br.com.mkmts.utils;

import java.util.ArrayList;

import br.com.mkmts.dto.AgendaDTO;
import br.com.mkmts.dto.CategoriaDTO;
import br.com.mkmts.dto.ClienteDTO;
import br.com.mkmts.dto.ConsultoraDTO;
import br.com.mkmts.dto.PedidoDTO;
import br.com.mkmts.dto.PercentDescontoEnum;
import br.com.mkmts.dto.ProdutoDTO;
import br.com.mkmts.dto.VendaDTO;
import br.com.mkmts.model.AgendaEntity;
import br.com.mkmts.model.ClienteEntity;
import br.com.mkmts.model.ConsultoraEntity;
import br.com.mkmts.model.embeddable.Pessoa;
import br.com.mkmts.model.pedidos.PedidoEntity;
import br.com.mkmts.model.pedidos.ProdutoCompradoHistoricoEntity;
import br.com.mkmts.model.produtos.CategoriaEntity;
import br.com.mkmts.model.produtos.ProdutoEntity;
import br.com.mkmts.model.vendas.ProdutoVendidoHistoricoEntity;
import br.com.mkmts.model.vendas.VendaEntity;
import br.com.mkmts.view.controller.menu.clientes.vo.ClienteVO;
import br.com.mkmts.view.controller.menu.produtos.vo.ProdutoVO;
import br.com.mkmts.view.controller.menu.vendas.vo.VendaVO;


public class Adapter {

//CONVERSOES DA CLASSE CLIENTE 	
	public static ClienteEntity dtoToEntity(ClienteDTO dto){
		ClienteEntity entity = new ClienteEntity();
		entity.setCodCliente(dto.getCodCliente());
		entity.setDadosPessoa(dto.getDadosPessoa());
		entity.setDataPrimeiraVenda(dto.getDataPrimeiraVenda());
		entity.setDataUltimaVenda(dto.getDataUltimaVenda());
		entity.setDataInicioAcompanhamento(dto.getDataInicioAcompanhamento());
		entity.setInfAdicional(dto.getInfAdicional());
		
		return entity;
	}

	public static ClienteDTO entityToDto(ClienteEntity entity){
		ClienteDTO dto = new ClienteDTO();
		dto.setCodCliente(entity.getCodCliente());
		dto.setDadosPessoa(entity.getDadosPessoa());
		dto.setDataPrimeiraVenda(entity.getDataPrimeiraVenda());
		dto.setDataUltimaVenda(entity.getDataUltimaVenda());
		dto.setDataInicioAcompanhamento(entity.getDataInicioAcompanhamento());
		dto.setInfAdicional(entity.getInfAdicional());
		
		return dto;
	}
	
	public static ClienteVO dtoToVo(ClienteDTO dto){
		ClienteVO vo = new ClienteVO();
		vo.setCodCliente(dto.getCodCliente());
		vo.setDataNascimento(dto.getDadosPessoa().getDataNascimento());
		vo.setDataPrimeiraVenda(dto.getDataPrimeiraVenda());
		vo.setDataUltimaVenda(dto.getDataUltimaVenda());
		vo.setEmail(dto.getDadosPessoa().getEmail());
		vo.setEndereco(dto.getDadosPessoa().getEndereco());
		vo.setInfAdicional(dto.getInfAdicional());
		vo.setNome(dto.getDadosPessoa().getNome());
		vo.setNumCelular(dto.getDadosPessoa().getNumCelular());
		vo.setNumTelefone(dto.getDadosPessoa().getNumTelefone());
		vo.setDataInicioAcompanhamento(dto.getDataInicioAcompanhamento());
		vo.setSexo(dto.getDadosPessoa().getSexo());
		
		return vo;
	}
	
	public static ClienteDTO voToDto(ClienteVO vo){
		ClienteDTO dto = new ClienteDTO();
		dto.setCodCliente(vo.getCodCliente());
		dto.setDadosPessoa(new Pessoa(vo.getNome(), vo.getEndereco(), vo.getNumTelefone(), vo.getNumCelular(), vo.getEmail(), vo.getDataNascimento(), vo.getSexo()));
		dto.setDataPrimeiraVenda(vo.getDataPrimeiraVenda());
		dto.setDataUltimaVenda(vo.getDataUltimaVenda());
		dto.setInfAdicional(vo.getInfAdicional());
		dto.setDataInicioAcompanhamento(vo.getDataInicioAcompanhamento());
		return dto;
	}
	
	
//CONVERSOES DA CLASSE PRODUTO
	public static ProdutoEntity dtoToEntity(ProdutoDTO dto){
		ProdutoEntity entity = dto.getCodProduto();
		return entity;
	}
	
	public static ProdutoDTO entityToDto(ProdutoEntity entity){
		ProdutoDTO dto = new ProdutoDTO();
		dto.setCodProduto(entity);		
		return dto;
	}
	
	public static ProdutoDTO voToDto(ProdutoVO vo){
		ProdutoDTO dto = new ProdutoDTO();
		dto.getCodProduto().setCodProduto(vo.getCodProduto());
		dto.getCodProduto().setCodCategoria(vo.getCodCategoria());
		dto.getCodProduto().setDescProduto(vo.getDescProduto());
		dto.setDisponivel(vo.isDisponivel());
		dto.getCodProduto().setPontosPorUnidade(vo.getPontosPorUnidade());
		dto.getCodProduto().setPreco(vo.getPreco());
		dto.setQuantidadeEmEstoque(vo.getQuantidadeEmEstoque());
		return dto;
	}

	public static ProdutoVO dtoToVo(ProdutoDTO dto){
		ProdutoVO vo = new ProdutoVO();
		vo.setCodCategoria(dto.getCodProduto().getCodCategoria());
		vo.setCodProduto(dto.getCodProduto().getCodProduto());
		vo.setDescProduto(dto.getCodProduto().getDescProduto());
		vo.setDisponivel(dto.isDisponivel());
		vo.setPontosPorUnidade(dto.getCodProduto().getPontosPorUnidade());
		vo.setPreco(dto.getCodProduto().getPreco());
		vo.setQuantidadeEmEstoque(dto.getQuantidadeEmEstoque());
		return vo;
	}
//CONVERSOES DA CLASSE PEDIDO
	public static PedidoDTO entityToDto(PedidoEntity entity){
		PedidoDTO dto = new PedidoDTO();

		dto.setCodPedido(entity.getCodPedido());
		dto.setDtPedido(entity.getDtPedido());
		dto.setValorFinalTotalPago(entity.getValorTotalPago());
		dto.setValorTotalEmProdutos(entity.getValorTotalEmProdutos());
		dto.setPontosTotalPedido(entity.getPontosTotalPedido());
		dto.setLucroTotal(entity.getLucroTotal());
		dto.setValorFrete(entity.getValorFrete());
		dto.setValorTotalAtacado(entity.getVlrTotalComDesconto());
		dto.setPorcDesconto(entity.getPercDesconto().getCodigo());
		dto.setListaProdutosComprados(new ArrayList<ProdutoDTO>());
		for (int i = 0; i < entity.getListaProdutosComprados().size(); i++) {
			dto.getListaProdutosComprados().add(Adapter.entityToDtoProdHistoricoComprado(entity.getListaProdutosComprados().get(i)));
		}
		
		return dto;
	}	
	public static PedidoEntity dtoToEntity(PedidoDTO dto){
		PedidoEntity entity = new PedidoEntity();
		entity.setCodPedido(dto.getCodPedido());
		entity.setDtPedido(dto.getDtPedido());
		entity.setValorTotalPago(dto.getValorFinalTotalPago());
		entity.setValorTotalEmProdutos(dto.getValorTotalEmProdutos());
		entity.setPontosTotalPedido(dto.getPontosTotalPedido());
		entity.setLucroTotal(dto.getLucroTotal());
		entity.setVlrTotalComDesconto(dto.getValorTotalAtacado());
		entity.setValorFrete(dto.getValorFrete());
		entity.setPercDesconto(PercentDescontoEnum.getDescontoByCodigo(dto.getPorcDesconto()));
		entity.setListaProdutosComprados(new ArrayList<ProdutoCompradoHistoricoEntity>());
		for (int i = 0; i < dto.getListaProdutosComprados().size(); i++) {
			entity.getListaProdutosComprados().add(Adapter.dtoToEntityProdHistoricoComprado(dto.getListaProdutosComprados().get(i)));
		}
		
		return entity;
	}

//CONVERSOES DA CLASSE VENDA
	public static VendaEntity dtoToEntity(VendaDTO dto) {
		VendaEntity entity = new VendaEntity();
		entity.setCodVenda(dto.getCodVenda());
		entity.setCliente(Adapter.dtoToEntity(dto.getCliente()));
		entity.setDataVenda(dto.getDataVenda());
		entity.setFormaDePagamento(dto.getFormaDePagamento());
		entity.setNumeroParcelas(dto.getNumeroParcelas());
		entity.setPossuiParcelas(dto.isPossuiParcelas());
		entity.setQtdeTotalPontosVendidos(dto.getQtdeTotalPontosVendidos());
		entity.setValorParcelas(dto.getValorParcelas());
		entity.setValorVenda(dto.getValorVenda());
		entity.setListaDeProdutos(new ArrayList<ProdutoVendidoHistoricoEntity>());
		for (int i = 0; i < dto.getListaDeProdutos().size(); i++) {
			entity.getListaDeProdutos().add(Adapter.dtoToEntityProdHistorico(dto.getListaDeProdutos().get(i)));
		}
		return entity;
	}	
	public static VendaDTO entityToDto(VendaEntity entity) {
		VendaDTO dto = new VendaDTO();
		dto.setCodVenda(entity.getCodVenda());
		dto.setCliente(Adapter.entityToDto(entity.getCliente()));
		dto.setDataVenda(entity.getDataVenda());
		dto.setFormaDePagamento(entity.getFormaDePagamento());
		dto.setNumeroParcelas(entity.getNumeroParcelas());
		dto.setPossuiParcelas(entity.isPossuiParcelas());
		dto.setQtdeTotalPontosVendidos(entity.getQtdeTotalPontosVendidos());
		dto.setValorParcelas(entity.getValorParcelas());
		dto.setValorVenda(entity.getValorVenda());
		dto.setListaDeProdutos(new ArrayList<ProdutoDTO>());
		for (int i = 0; i < entity.getListaDeProdutos().size(); i++) {
			dto.getListaDeProdutos().add(Adapter.entityToDtoProdHistorico(entity.getListaDeProdutos().get(i)));
		}
		return dto;
	}
	
	public static VendaVO dtoToVo(VendaDTO venda) {
		VendaVO vo = new VendaVO();
		vo.setCliente(venda.getCliente());
		vo.setCodVenda(venda.getCodVenda());
		vo.setDataVenda(venda.getDataVenda());
		vo.setFormaDePagamento(venda.getFormaDePagamento());
		vo.setNumeroParcelas(venda.getNumeroParcelas());
		vo.setPossuiParcelas(venda.isPossuiParcelas());
		vo.setListaProdutos(venda.getListaDeProdutos());
		vo.setQtdeTotalPontosVendidos(venda.getQtdeTotalPontosVendidos());
		vo.setValorParcelas(venda.getValorParcelas());
		vo.setValorVenda(venda.getValorVenda());
		
		return vo;
	}
	
	//CONVERSOES DA CLASSE PRODUTO-VENDIDO-HISTORICO
	public static ProdutoVendidoHistoricoEntity dtoToEntityProdHistorico(ProdutoDTO dto) {
		ProdutoVendidoHistoricoEntity historico = new ProdutoVendidoHistoricoEntity();
		historico.setCodProduto(dto.getCodProduto());
		historico.setDataVendaProduto(dto.getDataVendaProduto());
		historico.setId(dto.getCodVenda());
		historico.setQdteVendidaProduto(dto.getQdteProdutoCarrinho());
		historico.setQtdeTotalPontosVendidosProduto(dto.getQtdeTotalPontosProdutoCarrinho());
		historico.setValorTotalVendidoProduto(dto.getValorTotalProdutoCarrinho());
		return historico;
	
	}

	public static ProdutoDTO entityToDtoProdHistorico(ProdutoVendidoHistoricoEntity entity) {
		ProdutoDTO produto = new ProdutoDTO();
		produto.setCodProduto(entity.getCodProduto());
		produto.setDataVendaProduto(entity.getDataVendaProduto());
		produto.setCodVenda(entity.getId());
		produto.setQdteProdutoCarrinho(entity.getQdteVendidaProduto());
		produto.setQtdeTotalPontosProdutoCarrinho(entity.getQtdeTotalPontosVendidosProduto());
		produto.setValorTotalProdutoCarrinho(entity.getValorTotalVendidoProduto());
		return produto;
		
	}
	
	//CONVERSOES DA CLASSE PRODUTO-COMPRADO-HISTORICO
	public static ProdutoCompradoHistoricoEntity dtoToEntityProdHistoricoComprado(ProdutoDTO dto) {
		ProdutoCompradoHistoricoEntity historico = new ProdutoCompradoHistoricoEntity();
		historico.setCodProduto(dto.getCodProduto());
		historico.setDataCompraProduto(dto.getDataVendaProduto());
		historico.setId(dto.getCodVenda());
		historico.setQdteCompradaProduto(dto.getQdteProdutoCarrinho());
		historico.setQtdeTotalPontosCompradosProduto(dto.getQtdeTotalPontosProdutoCarrinho());
		historico.setValorTotalCompradoProduto(dto.getValorTotalProdutoCarrinho());
		return historico;
		
	}
	
	public static ProdutoDTO entityToDtoProdHistoricoComprado(ProdutoCompradoHistoricoEntity entity) {
		ProdutoDTO produto = new ProdutoDTO();
		produto.setCodProduto(entity.getCodProduto());
		produto.setDataVendaProduto(entity.getDataCompraProduto());
		produto.setCodVenda(entity.getId());
		produto.setQdteProdutoCarrinho(entity.getQdteCompradaProduto());
		produto.setQtdeTotalPontosProdutoCarrinho(entity.getQtdeTotalPontosCompradosProduto());
		produto.setValorTotalProdutoCarrinho(entity.getValorTotalCompradoProduto());
		return produto;
		
	}

	
	//CONVERSOES DA CLASSE PRODUTO
	public static CategoriaEntity dtoToEntity(CategoriaDTO dto){
		CategoriaEntity entity = new CategoriaEntity();
		entity.setCodCategoria(dto.getCodCategoria());
		entity.setCodSecao(dto.getCodSecao());
		entity.setDescCategoria(dto.getDescCategoria());
		return entity;
	}
	
	public static CategoriaDTO entityToDto(CategoriaEntity entity) {
		CategoriaDTO dto = new CategoriaDTO();
		dto.setCodCategoria(entity.getCodCategoria());
		dto.setCodSecao(entity.getCodSecao());
		dto.setDescCategoria(entity.getDescCategoria());
		return dto;
	}

	//CONVERSOES DA CLASSE AGENDA
	public static AgendaEntity dtoToEntity(AgendaDTO dto){
		AgendaEntity entity = new AgendaEntity();
		entity.setDataFim(dto.getDataFim());
		entity.setDataInicio(dto.getDataInicio());
		entity.setDescricao(dto.getDescricao());
		entity.setDiaTodo(dto.isDiaTodo());
		entity.setId(dto.getId());
		entity.setTipoAgenda(dto.getTipoAgenda());
		return entity;
	}
	
	public static AgendaDTO entityToDto(AgendaEntity entity) {
		AgendaDTO dto = new AgendaDTO();
		dto.setDataFim(entity.getDataFim());
		dto.setDataInicio(entity.getDataInicio());
		dto.setDescricao(entity.getDescricao());
		dto.setDiaTodo(entity.isDiaTodo());
		dto.setId(entity.getId());
		dto.setTipoAgenda(entity.getTipoAgenda());
		return dto;
	}
	//CONVERSOES DA CLASSE CONSULTORA
	public static ConsultoraEntity dtoToEntity(ConsultoraDTO dto){
		ConsultoraEntity entity = new ConsultoraEntity();
		entity.setCodConsultora(dto.getCodConsultora());
		entity.setDadosPessoa(dto.getDadosPessoa());
		entity.getDadosPessoa().setNumCelular(dto.getNumCelular());
		entity.getDadosPessoa().setNumTelefone(dto.getNumTelefone());
		entity.setDataDesativacao(dto.getDataDesativacao());
		entity.setDataInicio(dto.getDataInicio());
		entity.setStatus(dto.getStatus());
		entity.setDataDesativacao(dto.getDataDesativacao());
		entity.setInfAdicional(dto.getInfAdicional());
		return entity;
	}
	
	public static ConsultoraDTO entityToDto(ConsultoraEntity entity) {
		ConsultoraDTO dto = new ConsultoraDTO();
		dto.setCodConsultora(entity.getCodConsultora());
		dto.setDadosPessoa(entity.getDadosPessoa());
		dto.setDataDesativacao(entity.getDataDesativacao());
		dto.setDataInicio(entity.getDataInicio());
		dto.setStatus(entity.getStatus());
		dto.setDataDesativacao(entity.getDataDesativacao());
		dto.setInfAdicional(entity.getInfAdicional());
		dto.setNumCelular(entity.getDadosPessoa().getNumCelular());
		dto.setNumTelefone(dto.getDadosPessoa().getNumTelefone());
		return dto;
	}
	
}
